package com.example.location; import org.apache.cordova.api.Plugin; import org.apache.cordova.api.PluginResult; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; /** * 获取当前位置 * @author yy * */ public class BdLocationDemo extends Plugin { public static final String ACTION = "location"; private LocationClient mLocationClient = null; private JSONObject jsonObj = new JSONObject(); private PluginResult result = null; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { if (ACTION.equals("location")) { try { cordova.getActivity().runOnUiThread(new RunnableLoc()); } catch (Exception e) { } } else { mLocationClient.stop(); result = new PluginResult(PluginResult.Status.OK); } while (this.result == null) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } return result; } @Override public void onDestroy() { if (mLocationClient != null && mLocationClient.isStarted()) { mLocationClient.stop(); mLocationClient = null; } super.onDestroy(); } /** * @author Zhang Rong * @date: 2012-12-23 涓婂崍11:27:25 * @version 1.0 */ class RunnableLoc implements Runnable { public void run() { mLocationClient = new LocationClient(cordova.getActivity()); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); option.setCoorType("bd09ll"); option.setPriority(LocationClientOption.NetWorkFirst); option.setProdName("BaiduLoc"); option.setScanSpan(5000); mLocationClient.setLocOption(option); mLocationClient.registerLocationListener(new BDLocationListener() { public void onReceiveLocation(BDLocation location) { if (location == null) { return; } StringBuffer sb = new StringBuffer(256); if (location.getLocType() == BDLocation.TypeGpsLocation) { // GPS鎯呭喌 sb.append("\nSpeed : "); sb.append(location.getSpeed()); sb.append("\nSatellite : "); sb.append(location.getSatelliteNumber()); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) { sb.append("\nAddress : "); sb.append(location.getAddrStr()); try { // jsonObj.put("add", location.getAddrStr()); //经、纬度坐标 jsonObj.put("poi", location.getLongitude() "," location.getLatitude()); result = new PluginResult(PluginResult.Status.OK, jsonObj); System.out.println(location.getAddrStr()); } catch (JSONException e) { e.printStackTrace(); } } } public void onReceivePoi(BDLocation location) { } }); mLocationClient.start(); } } }
评论